package com.mrt.chatgpt.data.domain.order.service;

import com.mrt.chatgpt.data.domain.order.model.aggregates.CreateOrderAggregate;
import com.mrt.chatgpt.data.domain.order.model.entity.PayOrderEntity;
import com.mrt.chatgpt.data.domain.order.model.entity.ProductEntity;
import com.mrt.chatgpt.data.domain.order.model.entity.ShopCartEntity;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @Author 86135
 * @Date 2024/3/25 14:49
 * @Description
 * @Version 1.0
 * @快捷键 getterANDsetter ALT+Insert
 * @快捷键 Ctrl+/或者Ctrl+Shift+/都可以快速注释
 * @快捷键 Ctrl+D 快速复制代码
 * @“ctrl+r”快捷键,用于当前文件内容替换,指的是在当前打开的文件中替换匹配的字符,只操作一个文件;
 * @ALT+鼠标左键 整列编辑
 * @快捷键提示 ALT+Enter
 * @快捷键 快速写注释：在方法函数上方输入/** 然后回车
 * @快捷键 Ctrl+O，选择重写的方法
 * @快捷键 ALT+INSERT
 */
public interface IOrderService {
    /**
     * 用户下单，通过购物车信息，来生成下单后的支付单
     *
     * @param shopCartEntity 简单购物车
     * @return 支付单实体对象
     */
    PayOrderEntity createOrder(ShopCartEntity shopCartEntity);

    /**
     * 变更：订单支付成功
     *
     * @param orderId
     * @param transactionId
     * @param totalAmount
     * @param PayTime
     * @return
     */
    boolean changeOrderPaySuccess(String orderId, String transactionId, BigDecimal totalAmount, Date PayTime);

    /**
     * 查询订单信息
     *
     * @param orderId 订单ID
     * @return 查询结果
     */
    CreateOrderAggregate queryOrder(String orderId);

    /**
     * 订单商品发货
     *
     * @param orderId 订单ID
     */
    void deliverGoods(String orderId);


    /**
     * 查询待补货订单
     *
     * @return
     */
    List<String> queryReplenishmentOrder();


    /**
     * 查询有效期内，未接收到支付回调的订单
     *
     * @return
     */
    List<String> queryNoPayNotifyOrder();


    /**
     * 查询超时15分钟，未接收到支付回调的订单
     *
     * @return
     */
    List<String> queryTimeoutCloseOrderList();


    /**
     * 变更：订单支付关闭
     * @param orderId
     * @return
     */
    boolean changeOrderClose(String orderId);

    /**
     * 查询商品列表
     * @return
     */
    List<ProductEntity> queryProductList();

}